--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
scripts/pip-rns-deps.sh e41daa5b65e07a5baa1aaad32d97f90482f1cd1c (e41daa5b) Text, 4.95 KB
T8b949e#!/usr/bin/env bash
T8b949e# SPDX-License-Identifier: 0BSD
T8b949e# Install rns / lxmf / lxst into the project uv environment via pip-rns (rngit).
Tffa657set -euo pipefail
usageTff7b72(Tff7b72) Tff7b72{
cat Ta5d6ff<<'EOF'
Install Reticulum Python packages over RNS using pip-rns.
Requires a working Reticulum stack (rns already importable enough for mesh
pathfinding), git, and git-remote-rns / rngit tooling. First-time bootstrap of
rns itself still needs clearnet, a local wheel, or an existing install.
Usage:
bash scripts/pip-rns-deps.sh [options] [package ...]
Options:
-h, --help Show this help
--from-release Prefer rngit release wheels (--from-release)
--ref REF Pass --ref REF to each pip-rns install
--verify IDENTITY Require release signature (--verify)
--editable Editable install
--use-cache Pass --use-cache to pip-rns
--skip-ensure Do not try to install pip-rns if missing
--dry-run Print commands only
Default packages: rns lxmf lxst
Environment:
PIP_RNS_CONFIG Config dir with aliases (default: scripts/pip-rns)
MESHCHATX_PIP_RNS_FROM_RELEASE Set to 1 to imply --from-release
MESHCHATX_PIP_RNS_REF Default --ref when not passed on CLI
MESHCHATX_PIP_RNS_VERIFY Default --verify identity hash
MESHCHATX_PIP_RNS_PACKAGES Space-separated package list override
EOF
Tff7b72}
Te6edf3ROOT_DIRTff7b72=Ta5d6ff"Tff7b72$(Tffa657cd Ta5d6ff"Tff7b72$(dirname Ta5d6ff"Tffd700${Te6edf3BASH_SOURCETb4b4b4[0]Tffd700}Ta5d6ff"Tff7b72)Ta5d6ff/..Ta5d6ff" Tff7b72&& Tffa657pwdTff7b72)Ta5d6ff"
Tffa657cd Ta5d6ff"Tffd700${Te6edf3ROOT_DIRTffd700}Ta5d6ff"
Te6edf3CONFIG_DIRTff7b72=Ta5d6ff"Tffd700${Te6edf3PIP_RNS_CONFIGTff7b72:-Tffd700${Te6edf3ROOT_DIRTffd700}Tb4b4b4/scripts/pip-rnsTffd700}Ta5d6ff"
Tffa657export Te6edf3PIP_RNS_CONFIGTff7b72=Ta5d6ff"Tffd700${Te6edf3CONFIG_DIRTffd700}Ta5d6ff"
Te6edf3FROM_RELEASETff7b72=T79c0ff0
Te6edf3REFTff7b72=Ta5d6ff"Tffd700${Te6edf3MESHCHATX_PIP_RNS_REFTff7b72:-Tffd700}Ta5d6ff"
Te6edf3VERIFYTff7b72=Ta5d6ff"Tffd700${Te6edf3MESHCHATX_PIP_RNS_VERIFYTff7b72:-Tffd700}Ta5d6ff"
Te6edf3EDITABLETff7b72=T79c0ff0
Te6edf3USE_CACHETff7b72=T79c0ff0
Te6edf3SKIP_ENSURETff7b72=T79c0ff0
Te6edf3DRY_RUNTff7b72=T79c0ff0
Te6edf3PACKAGESTff7b72=Tff7b72(Tff7b72)
Tff7b72if Tff7b72[Tff7b72[ Ta5d6ff"Tffd700${Te6edf3MESHCHATX_PIP_RNS_FROM_RELEASETff7b72:-Tffd700}Ta5d6ff" Tff7b72=Tff7b72= Ta5d6ff"1" Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
Te6edf3FROM_RELEASETff7b72=T79c0ff1
Tff7b72fi
Tff7b72while Tff7b72[Tff7b72[ Te6edf3$# -gt T79c0ff0 Tff7b72]Tff7b72]Tb4b4b4; Tff7b72do
Tff7b72case Ta5d6ff"Te6edf3$1Ta5d6ff" Tff7b72in
-hTb4b4b4|--helpTff7b72)
usage
Tffa657exit T79c0ff0
Tb4b4b4;Tb4b4b4;
--from-releaseTff7b72)
Te6edf3FROM_RELEASETff7b72=T79c0ff1
Tffa657shift
Tb4b4b4;Tb4b4b4;
--refTff7b72)
Te6edf3REFTff7b72=Ta5d6ff"Tffd700${Te6edf32Tff7b72:-Tffd700}Ta5d6ff"
Tffa657shift T79c0ff2
Tb4b4b4;Tb4b4b4;
--verifyTff7b72)
Te6edf3VERIFYTff7b72=Ta5d6ff"Tffd700${Te6edf32Tff7b72:-Tffd700}Ta5d6ff"
Tffa657shift T79c0ff2
Tb4b4b4;Tb4b4b4;
--editableTff7b72)
Te6edf3EDITABLETff7b72=T79c0ff1
Tffa657shift
Tb4b4b4;Tb4b4b4;
--use-cacheTff7b72)
Te6edf3USE_CACHETff7b72=T79c0ff1
Tffa657shift
Tb4b4b4;Tb4b4b4;
--skip-ensureTff7b72)
Te6edf3SKIP_ENSURETff7b72=T79c0ff1
Tffa657shift
Tb4b4b4;Tb4b4b4;
--dry-runTff7b72)
Te6edf3DRY_RUNTff7b72=T79c0ff1
Tffa657shift
Tb4b4b4;Tb4b4b4;
--Tff7b72)
Tffa657shift
Tff7b72break
Tb4b4b4;Tb4b4b4;
-*Tff7b72)
Tffa657echo Ta5d6ff"Ta5d6ffUnknown option: Te6edf3$1Ta5d6ff" >Tb4b4b4&T79c0ff2
usage >Tb4b4b4&T79c0ff2
Tffa657exit T79c0ff2
Tb4b4b4;Tb4b4b4;
*Tff7b72)
Te6edf3PACKAGESTff7b72+=Tff7b72(Ta5d6ff"Te6edf3$1Ta5d6ff"Tff7b72)
Tffa657shift
Tb4b4b4;Tb4b4b4;
Tff7b72esac
Tff7b72done
Tff7b72if Tff7b72[Tff7b72[ Tffd700${#Te6edf3PACKAGESTb4b4b4[@]Tffd700} -eq T79c0ff0 Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
Tff7b72if Tff7b72[Tff7b72[ -n Ta5d6ff"Tffd700${Te6edf3MESHCHATX_PIP_RNS_PACKAGESTff7b72:-Tffd700}Ta5d6ff" Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
T8b949e# shellcheck disable=SC2206
Te6edf3PACKAGESTff7b72=Tff7b72(Tffd700${Te6edf3MESHCHATX_PIP_RNS_PACKAGESTffd700}Tff7b72)
Tff7b72else
Te6edf3PACKAGESTff7b72=Tff7b72(rns lxmf lxstTff7b72)
Tff7b72fi
Tff7b72fi
Tff7b72if Tff7b72[Tff7b72[ ! -f Ta5d6ff"Tffd700${Te6edf3CONFIG_DIRTffd700}Ta5d6ff/aliasesTa5d6ff" Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"Ta5d6ffMissing aliases file: Tffd700${Te6edf3CONFIG_DIRTffd700}Ta5d6ff/aliasesTa5d6ff" >Tb4b4b4&T79c0ff2
Tffa657exit T79c0ff1
Tff7b72fi
run_cmdTff7b72(Tff7b72) Tff7b72{
Tff7b72if Tff7b72[Tff7b72[ Ta5d6ff"Tffd700${Te6edf3DRY_RUNTffd700}Ta5d6ff" -eq T79c0ff1 Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
Tffa657printf Ta5d6ff'+'
Tffa657printf Ta5d6ff' %q' Ta5d6ff"Te6edf3$@Ta5d6ff"
Tffa657printf Ta5d6ff'\n'
Tff7b72return T79c0ff0
Tff7b72fi
Ta5d6ff"Te6edf3$@Ta5d6ff"
Tff7b72}
ensure_pip_rnsTff7b72(Tff7b72) Tff7b72{
Tff7b72if Tffa657command -v pip-rns >/dev/null T79c0ff2>Tb4b4b4&T79c0ff1Tb4b4b4; Tff7b72then
Tff7b72return T79c0ff0
Tff7b72fi
Tff7b72if Tff7b72[Tff7b72[ Ta5d6ff"Tffd700${Te6edf3SKIP_ENSURETffd700}Ta5d6ff" -eq T79c0ff1 Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"pip-rns not found on PATH (and --skip-ensure was set)" >Tb4b4b4&T79c0ff2
Tffa657exit T79c0ff1
Tff7b72fi
Tffa657echo Ta5d6ff"pip-rns not found, installing into project environment with uv..." >Tb4b4b4&T79c0ff2
Tff7b72if Tffa657command -v uv >/dev/null T79c0ff2>Tb4b4b4&T79c0ff1Tb4b4b4; Tff7b72then
run_cmd uv pip install pip-rns
Tff7b72else
run_cmd python3 -m pip install pip-rns
Tff7b72fi
Tff7b72if ! Tffa657command -v pip-rns >/dev/null T79c0ff2>Tb4b4b4&T79c0ff1Tb4b4b4; Tff7b72then
Tff7b72if Tffa657command -v uv >/dev/null T79c0ff2>Tb4b4b4&T79c0ff1Tb4b4b4; Tff7b72then
Te6edf3PIP_RNS_BINTff7b72=Tff7b72(uv run pip-rnsTff7b72)
Tff7b72return T79c0ff0
Tff7b72fi
Tffa657echo Ta5d6ff"pip-rns still not on PATH after install" >Tb4b4b4&T79c0ff2
Tffa657exit T79c0ff1
Tff7b72fi
Tff7b72}
Te6edf3PIP_RNS_BINTff7b72=Tff7b72(pip-rnsTff7b72)
Tff7b72if Tff7b72[Tff7b72[ Ta5d6ff"Tffd700${Te6edf3DRY_RUNTffd700}Ta5d6ff" -eq T79c0ff1 Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
:
Tff7b72else
ensure_pip_rns
Tff7b72fi
Tff7b72if Tff7b72[Tff7b72[ Ta5d6ff"Tffd700${Te6edf3DRY_RUNTffd700}Ta5d6ff" -eq T79c0ff0 Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"Note: Installing packages over RNS can be slow and use significant mesh bandwidth." >Tb4b4b4&T79c0ff2
Tff7b72fi
Te6edf3EXTRA_ARGSTff7b72=Tff7b72(Tff7b72)
Tff7b72if Tff7b72[Tff7b72[ Ta5d6ff"Tffd700${Te6edf3FROM_RELEASETffd700}Ta5d6ff" -eq T79c0ff1 Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
Te6edf3EXTRA_ARGSTff7b72+=Tff7b72(--from-releaseTff7b72)
Tff7b72fi
Tff7b72if Tff7b72[Tff7b72[ -n Ta5d6ff"Tffd700${Te6edf3REFTffd700}Ta5d6ff" Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
Te6edf3EXTRA_ARGSTff7b72+=Tff7b72(--ref Ta5d6ff"Tffd700${Te6edf3REFTffd700}Ta5d6ff"Tff7b72)
Tff7b72fi
Tff7b72if Tff7b72[Tff7b72[ -n Ta5d6ff"Tffd700${Te6edf3VERIFYTffd700}Ta5d6ff" Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
Te6edf3EXTRA_ARGSTff7b72+=Tff7b72(--verify Ta5d6ff"Tffd700${Te6edf3VERIFYTffd700}Ta5d6ff"Tff7b72)
Tff7b72fi
Tff7b72if Tff7b72[Tff7b72[ Ta5d6ff"Tffd700${Te6edf3EDITABLETffd700}Ta5d6ff" -eq T79c0ff1 Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
Te6edf3EXTRA_ARGSTff7b72+=Tff7b72(--editableTff7b72)
Tff7b72fi
Tff7b72if Tff7b72[Tff7b72[ Ta5d6ff"Tffd700${Te6edf3USE_CACHETffd700}Ta5d6ff" -eq T79c0ff1 Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
Te6edf3EXTRA_ARGSTff7b72+=Tff7b72(--use-cacheTff7b72)
Tff7b72fi
Tff7b72for pkg Tff7b72in Ta5d6ff"Tffd700${Te6edf3PACKAGESTb4b4b4[@]Tffd700}Ta5d6ff"Tb4b4b4; Tff7b72do
Tffa657echo Ta5d6ff"Ta5d6ffpip-rns install --uv Tffd700${Te6edf3pkgTffd700}Tffd700${Te6edf3EXTRA_ARGSTb4b4b4[*]Tb4b4b4:Tb4b4b4+ Tffd700${Te6edf3EXTRA_ARGSTb4b4b4[*]Tffd700}Tffd700}Ta5d6ff"
run_cmd Ta5d6ff"Tffd700${Te6edf3PIP_RNS_BINTb4b4b4[@]Tffd700}Ta5d6ff" install --uv Ta5d6ff"Tffd700${Te6edf3pkgTffd700}Ta5d6ff" Ta5d6ff"Tffd700${Te6edf3EXTRA_ARGSTb4b4b4[@]Tffd700}Ta5d6ff"
Tff7b72done
Tff7b72if Tff7b72[Tff7b72[ Ta5d6ff"Tffd700${Te6edf3DRY_RUNTffd700}Ta5d6ff" -eq T79c0ff0 Tff7b72]Tff7b72]Tb4b4b4; Tff7b72then
Tff7b72if Tffa657command -v uv >/dev/null T79c0ff2>Tb4b4b4&T79c0ff1Tb4b4b4; Tff7b72then
run_cmd uv run python scripts/patch_lxst_pyogg_ogg_ctypes.py
Tff7b72else
run_cmd python3 scripts/patch_lxst_pyogg_ogg_ctypes.py
Tff7b72fi
Tff7b72fi
Tffa657echo Ta5d6ff"Ta5d6ffDone. Installed via pip-rns: Tffd700${Te6edf3PACKAGESTb4b4b4[*]Tffd700}Ta5d6ff"
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────